package com.ccit.springbootlaw.controller.base;

import com.ccit.springbootlaw.controller.resful.Code;
import com.ccit.springbootlaw.controller.resful.Result;
import com.ccit.springbootlaw.pojo.Law;
import com.ccit.springbootlaw.pojo.PageBean;
import com.ccit.springbootlaw.service.LawService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

// 法律信息控制器，提供法律相关的RESTful API接口
@RestController
@RequestMapping("/api/laws")
public class LawController {

    @Autowired
    private LawService lawService;

    /**
     * 根据ID查询法律信息
     *
     * @param id 法律ID
     * @return 返回查询结果，包含法律信息或错误信息
     */
    @GetMapping("/{id}")
    public Result findById(@PathVariable int id) {
        Law law = lawService.findById(id);
        if (law != null) {
            return new Result(Code.GET_OK, law, "查询成功");
        } else {
            return new Result(Code.GET_ERR, null, "查询失败，未找到对应法律");
        }
    }

    /**
     * 根据多条件查询法律信息
     *
     * @param law       包含查询条件的法律对象
     * @param page      包含分页参数
     * @param startTime 开始时间（可选）
     * @param endTime   结束时间（可选）
     * @return 返回查询结果，包含法律信息列表或错误信息
     */
    @PostMapping("/search/{page}")
    public Result findByCriteria(@RequestBody Law law, @PathVariable int page,
                                 @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime,
                                 @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) {
        PageBean<Law> laws = lawService.findByCriteria(law, startTime, endTime, page);
        if (laws != null) {
            return new Result(Code.GET_OK, laws, "查询成功");
        } else {
            return new Result(Code.GET_ERR, null, "查询失败，未找到符合条件的法律");
        }
    }

    /**
     * 插入新的法律信息
     *
     * @param law 法律对象
     * @return 返回插入结果，包含法律信息或错误信息
     */
    @PostMapping
    public Result insertLaw(@RequestBody Law law) {
        int result = lawService.insertLaw(law);
        if (result > 0) {
            return new Result(Code.ADD_OK, law, "添加成功");
        } else {
            return new Result(Code.ADD_ERR, null, "添加失败");
        }
    }

    /**
     * 更新法律信息
     *
     * @param law 包含更新信息的法律对象
     * @return 返回更新结果，包含法律信息或错误信息
     */
    @PutMapping
    public Result updateLaw(@RequestBody Law law) {
        int result = lawService.updateLaw(law);
        if (result > 0) {
            return new Result(Code.UPDATE_OK, law, "更新成功");
        } else {
            return new Result(Code.UPDATE_ERR, null, "更新失败");
        }
    }

    /**
     * 删除法律信息
     *
     * @param id 法律ID
     * @return 返回删除结果，包含成功或失败信息
     */
    @DeleteMapping("/{id}")
    public Result deleteLawById(@PathVariable int id) {
        int result = lawService.deleteLawById(id);
        if (result > 0) {
            return new Result(Code.DELETE_OK, null, "删除成功");
        } else {
            return new Result(Code.DELETE_ERR, null, "删除失败");
        }
    }

    /**
     * 查询所有法律信息
     *
     * @param page 包含分页参数
     * @return 返回所有法律信息，包含法律信息列表或错误信息
     */
    @GetMapping("/all/{page}")
    public Result findAllLaws(@PathVariable int page) {
        PageBean<Law> laws = lawService.findAllLaws(page);
        if (laws != null) {
            return new Result(Code.GET_OK, laws, "查询成功");
        } else {
            return new Result(Code.GET_ERR, null, "查询失败，未找到任何法律");
        }
    }
}